package com.cmc.cloud.cmclink.doc.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cmc.cloud.cmclink.doc.api.document.rep.*;
import com.cmc.cloud.cmclink.doc.api.document.req.EqmBlInfoRespDto;
import com.cmc.cloud.cmclink.doc.api.document.req.EqmVoyInfoReqDto;
import com.cmc.cloud.cmclink.doc.api.document.req.si.BlnoPageReqDto;
import com.cmc.cloud.cmclink.doc.api.document.req.si.BlnoVesselVesselPortReqDto;
import com.cmc.cloud.cmclink.doc.api.document.req.so.EqmInfoSearchReqDto;
import com.cmc.cloud.cmclink.doc.dto.VgmTelAndEmailInfoDto;
import com.cmc.cloud.cmclink.doc.entity.BlnoDO;
import com.cmc.cloud.cmclink.doc.vo.blnolocalchargevo.*;
import com.cmc.cloud.cmclink.doc.vo.blnolocalcostvo.BlnoLocaCoastExRespVO;
import com.cmc.cloud.cmclink.doc.vo.blnolocalcostvo.BlnoLocalCostExReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnovo.*;
import com.cmc.cloud.cmclink.doc.vo.manifestvo.manifestcntr.ManifestCntrSumCheckVO;
import com.cmc.cloud.cmclink.doc.vo.multimodaltransport.localcost.MultiBlnoLocalCostReqVO;
import com.cmc.cloud.cmclink.doc.vo.multimodaltransport.localcost.MultiBlnoLocalCostRespVO;
import com.cmc.cloud.cmclink.doc.vo.multimodaltransport.multiblnoop.MultiBlnoOpReqVO;
import com.cmc.cloud.cmclink.doc.vo.multimodaltransport.multiop.MultiOpTransferAgentPageReqVO;
import com.cmc.cloud.cmclink.doc.vo.multimodaltransport.multiop.MultiOpTransferAgentPageRespVO;
import com.cmc.cloud.cmclink.doc.vo.partner.PartnerSiMaintenancePageReqVO;
import com.cmc.cloud.cmclink.doc.vo.partner.PartnerSiMaintenancePageRespVO;
import com.cmc.cloud.cmclink.doc.vo.voyagelock.VoyageLockImBaseVO;
import com.cmc.cloud.cmclink.doc.vo.voyagelock.VoyageLockImPageReqVO;
import com.cmc.cloud.cmclink.svl.api.base.resp.VoyQueryRespDTO;
import com.cmes.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 提单主信息 Mapper
 *
 * @author 集运管理员
 */
@Mapper
public interface BlnoMapper extends BaseMapperX<BlnoDO> {
    /**
     * 提单主信息
     *
     * @param page
     * @param reqVo
     * @return 提单主信息
     */
    IPage<BlnoPageRespVO> getBlnoBaseInfo(IPage<BlnoPageRespVO> page, @Param("reqVo") BlnoPageReqVO reqVo);

    /**
     * 提单主信息
     *
     * @param page
     * @param reqVo
     * @param keyLst
     * @return 提单主信息
     */
    IPage<BlnoImPageRespVO> getBlnoIm(IPage<BlnoPageRespVO> page, @Param("reqVo") BlnoImPageReqVO reqVo, @Param("keyLST") List<String> keyLst);

    /**
     * 提单主信息
     *
     * @param reqVo
     * @param keyLst
     * @return 提单主信息
     */
    List<BlnoImPageRespVO> getBlnoIm(@Param("reqVo") BlnoImPageReqVO reqVo, @Param("keyLST") List<String> keyLst);

    /**
     * 提单主信息
     *
     * @param reqVo
     * @return
     */
    List<BlnoTransferVO> getBlnoAll(@Param("reqVo") BlnoTransferVO reqVo);

    /**
     * 提单主信息
     *
     * @param reqVO
     * @return
     */
    List<BlnoLocaCoastExRespVO> getBlnoWithLocalCostList(@Param("reqVo") BlnoLocalCostExReqVO reqVO);

    /**
     * 出口提单local charge 费用计算查询
     *
     * @param reqVo
     * @return
     */
    List<BlnoLocalChargeRespVO> getBlnoInfo(@Param("reqVo") BlnoLocalChargeReqVO reqVo);


    /**
     * 多式联运出口提单local charge 费用计算查询
     *
     * @param reqVo
     * @return
     */
    List<MultiBlnoLocalChargeRespVO> getMultiExBlnoInfo(@Param("reqVo") MultiBlnoLocalChargeReqVO reqVo);

    /**
     * 多式联运进口提单local charge 费用计算查询
     *
     * @param reqVo
     * @return
     */
    List<MultiBlnoLocalChargeRespVO> getMultiImBlnoInfo(@Param("reqVo") MultiBlnoLocalChargeReqVO reqVo);

    /**
     * 进口提单local charge 费用计算查询
     *
     * @param reqVo
     * @return
     */
    List<BlnoLocalChargeRespVO> getImBlnoInfo(@Param("reqVo") BlnoLocalChargeReqVO reqVo);


    /**
     * 提单主信息
     *
     * @param page
     * @param reqVo
     * @return 提单主信息
     */
    IPage<BlnoPageRespDto> rpcPageBlnoInfo(IPage<BlnoPageRespDto> page, @Param("reqVo") BlnoPageReqDto reqVo);

    /**
     * 提单主信息
     *
     * @param req
     * @return
     */
    List<BlnoCntrStaticDto> rpcBlnoCntr(@Param("reqVo") BlnoPageReqDto req);

    /**
     * 查询出口费用计算
     *
     * @param blnoLocalChargeSeqrchVO
     * @return
     */
    List<BlnoDO> searchExBlnoInfo(@Param("reqVo") BlnoLocalChargeSearchVO blnoLocalChargeSeqrchVO);

    /**
     * 查询进口费用计算
     *
     * @param blnoLocalChargeSeqrchVO
     * @return
     */
    List<BlnoDO> searchImBlnoInfo(@Param("reqVo") BlnoLocalChargeSearchVO blnoLocalChargeSeqrchVO);

    /**
     * 箱管查询进口放箱信息清单
     *
     * @param reqVo
     * @return
     */
    List<EqmInfoSearchRespDto> rpcEqmSearchBlnoInfo(@Param("reqVo") EqmInfoSearchReqDto reqVo);

    /**
     * 出口航线信息查询
     *
     * @param reqVo
     * @return
     */
    List<EqmVoyInfoRespDto> rpcEqmSearchExVoyInfo(@Param("reqVo") EqmVoyInfoReqDto reqVo);

    /**
     * 进口航线信息查询
     *
     * @param reqVo
     * @return
     */
    List<EqmVoyInfoRespDto> rpcEqmSearchImVoyInfo(@Param("reqVo") EqmVoyInfoReqDto reqVo);

    /**
     * 查询单证数据
     *
     * @param blNo
     * @param pol
     * @return
     */
    List<EqmBlInfoRespDto> rpcEqmBlInfo(@Param("blNo") String blNo, @Param("pol") String pol);


    /**
     * 货物 统计信息 总
     *
     * @param bookingNos
     * @param splitCombineTypeList
     * @return
     */
    List<ManifestCntrSumCheckVO> selectSumByBookingNo(@Param("bookingNos") List<String> bookingNos, @Param("splitCombineTypeList") List<String> splitCombineTypeList);

    /**
     * draftConfirm逾期bl查询
     *
     * @param deadline  截止时间
     * @param limitLine 返回数据行数
     * @return draftConfirm逾期blid列表
     */
    List<Long> selectDraftConfirmOverdueBlIds(@Param("deadline") String deadline, @Param("limitLine") int limitLine);

    /**
     * 提单主信息
     *
     * @param page
     * @param reqVo
     * @return 提单主信息
     */
    IPage<VoyageLockImBaseVO> getBlnoLockIm(IPage<BlnoPageRespVO> page, @Param("reqVo") VoyageLockImPageReqVO reqVo);

    /**
     * 通过主键ID批量查询blNo(删除未删除都查)
     *
     * @param ids 主键ID集合
     * @return blNo集合
     */
    List<String> getBlNoByIdListNotDependOnDeleted(@Param("ids") List<Long> ids);

    /**
     * 合作方SI维护分页列表查询
     *
     * @param page
     * @param reqVo
     * @return 提单主信息
     */
    IPage<PartnerSiMaintenancePageRespVO> selectPartnerSiMaintenancePageList(IPage<PartnerSiMaintenancePageRespVO> page, @Param("reqVo") PartnerSiMaintenancePageReqVO reqVo);

    /**
     * vgm查询发货人信息
     *
     * @param bkgVesselCodes
     * @param bkgVoyages
     * @param cntrNos
     * @return
     */
    List<VgmTelAndEmailInfoDto> selectTelAndEmailInfo(@Param("bkgVesselCodes") List<String> bkgVesselCodes, @Param("bkgVoyages") List<String> bkgVoyages, @Param("cntrNos") List<String> cntrNos);

    /**
     * 多式联运查询
     *
     * @param page
     * @param reqVo
     * @return
     */
    IPage<BlnoPageRespVO> getMultiBlnoBaseInfo(IPage<BlnoPageRespVO> page, @Param("reqVo") MultiBlnoOpReqVO reqVo);

    /**
     * 查询提单订舱人信息
     *
     * @param vslCode
     * @param voyCode
     * @return
     */
    List<String> getBlnoCsmCodeInfo(@Param("vslCode") String vslCode, @Param("voyCode") String voyCode, @Param("portCode") String portCode);


    /**
     * 查询提单是否锁船 pol
     *
     * @param blIds
     * @param exImType
     * @return
     */
    List<Long> findVoyageLockByBlIds(@Param("blIds") List<Long> blIds, @Param("exImType") String exImType);

    /**
     * 查询进口-中转代理提单数据
     *
     * @param reqVo
     * @param voys
     * @param page
     * @return 进口中转代理提单数据
     */
    IPage<MultiOpTransferAgentPageRespVO> selectMultiOpTransferAgent(IPage<MultiOpTransferAgentPageRespVO> page,@Param("reqVo") MultiOpTransferAgentPageReqVO reqVo, @Param("voys") List<VoyQueryRespDTO> voys);



    /**
     * 多式联运进口local cost 信息查询
     *
     * @param reqVo
     * @return
     */
    List<MultiBlnoLocalCostRespVO> getMultiImBlnoLocalCostInfo(@Param("reqVo") MultiBlnoLocalCostReqVO reqVo);

    /**
     * 多式联运出口local cost 信息查询
     *
     * @param reqVo
     * @return
     */
    List<MultiBlnoLocalCostRespVO> getMultiExBlnoLocalCostInfo(@Param("reqVo") MultiBlnoLocalCostReqVO reqVo);

    /**
     * 多式联运出口local cost 信息查询
     *
     * @param blnoCntrCntaoReqVO
     * @return
     */
    List<BlnoCntrCntaoVO> selectCntaoCntr(@Param("reqVo") BlnoCntrCntaoReqVO blnoCntrCntaoReqVO);

    /**
     * 单证装卸船数据查询接口
     * @param req
     * @return 单证装卸船数据
     */
    List<BlnoVesselVesselPortRespDto> queryBlnoInfoByVesselVesselPort(@Param("reqVo") BlnoVesselVesselPortReqDto req);

}
